package sel.me.java.learning.rabbitmq.workqueue.producer;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;

import sel.me.java.learning.rabbitmq.ConnectionUtil;

/*
 * 上一个例子是一对一发送接收形式，而工作队列为一对多发送接收形式。工作队列(即任务队列)背后的主要思想是避免立即执行资源密集型任务，并且必须等待它完成。
 * 相反，我们把任务安排在以后做。我们将任务封装为消息并将其发送到队列。
 * 在后台运行的工作进程会弹出任务并最终执行任务。当你运行许多Consumer时，任务将在他们之间共享，如下图：
 */
public class WorkQueueProducer {

	private final static String QUEUE_NAME = "test_queue_work";

    public static void main(String[] args) throws Exception {
        Connection connection = ConnectionUtil.getConnection();
        Channel channel = connection.createChannel();
        channel.queueDeclare(QUEUE_NAME,false,false,false,null);
        for (int i = 0; i < 50; i++) {
            String message = "" + i;
            channel.basicPublish("",QUEUE_NAME,null,message.getBytes());
            Thread.sleep(100 * i);
        }
        channel.close();
        connection.close();
    }
}
